package com.itheima.mapper;

import com.github.pagehelper.Page;
import com.itheima.pojo.Role;
import org.apache.ibatis.annotations.Param;

import java.util.Set;

public interface RoleMapper {

    /**
     * 根据条件分页查找
     *
     * @param queryString 查询条件
     * @return
     */
    Page<Role> findRoleByCondition(@Param("queryString") String queryString);

    /**
     * 保存角色
     *
     * @param role 角色
     */
    void save(Role role);

    /**
     * 保存角色和权限关系
     *
     * @param roleId 角色id
     * @param permissionId  权限id
     */
    void saveRoleAndPer(@Param("roleId") Integer roleId, @Param("permissionId") Integer permissionId);
    /**
     * 保存角色和权限关系
     *
     * @param roleId 角色id
     * @param menuId 菜单id
     */
    void saveRoleAndMenu(@Param("roleId")Integer roleId,@Param("menuId") Integer menuId);

    /**
     * 通过角色id查询权限
     *
     * @param roleId 角色id
     * @return
     */
    Set<Integer> findPerIdByRoleId(@Param("roleId") Integer roleId);

    /**
     * 通过id查找角色
     *
     * @param roleId 角色id
     * @return
     */
    Role findById(@Param("roleId") Integer roleId);

    /**
     * 删除角色(软删除)
     *
     * @param roleId 角色id
     */
    void delete(@Param("roleId") Integer roleId);

    /**
     * 统计角色id判断角色是否在关联表中
     *
     * @param roleId 角色id
     * @return
     */
    long count(@Param("roleId") Integer roleId);

    /**
     * 修改角色基本信息
     *
     * @param role 角色
     */
    void update(Role role);

    /**
     * 删除角色和权限关系通过角色id
     *
     * @param roleId 角色id
     */
    void deleteRoleAndPerByRoleId(@Param("roleId") Integer roleId);

    /**
     * 删除角色和菜单关系通过角色id
     *
     * @param roleId 角色id
     */
    void deleteRoleAndMenuByRoleId(@Param("roleId")Integer roleId);


    Set<Integer> findMenuIdByRoleId(Integer roleId);
}
